package com.sojson.util.security.springsecurity.service;

import java.io.IOException;

/**
 * SpringSecurity权限注解实现类<BR/>
 * 使用方法: 在方法上加@ss.hasPermi('*')<BR/>
 * ss代表@Service("ss")中的ss<BR/>
 * hasPermi代表Service中的方法名<BR/>
 * ('*')代表参数和内容<BR/>
 * 
 * @author liu
 * @date 2021-04-14
 */
public interface AnnotationService {

    /** 是否启动注解拦截 */
    boolean isEnabled = true;
    /** 当前Bean的名称 */
    String BEAN_NAME = "ss";
    /** 管理员角色权限标识 */
    String SUPER_ADMIN = "admin";
    /** 所有权限标识 */
    String ALL_PERMISSION = "/**";
    String ROLE_DELIMETER = ",";
    String PERMISSION_DELIMETER = ",";

    /**
     * 验证用户是否登录
     * 
     * @return
     * @throws IOException
     */
    boolean login() throws IOException;

    /**
     * 验证用户是否具备某权限
     *
     * @param permission 权限字符串
     * @return 用户是否具备某权限
     * @throws IOException 
     */
    boolean hasPermi(String permission) throws IOException;

    /**
     * 验证用户是否不具备某权限,与 hasPermi逻辑相反
     *
     * @param permission 权限字符串
     * @return 用户是否不具备某权限
     * @throws IOException 
     */
    boolean lacksPermi(String permission) throws IOException;

    /**
     * 验证用户是否具有以下任意一个权限
     *
     * @param permissions 以 PERMISSION_NAMES_DELIMETER 为分隔符的权限列表
     * @return 用户是否具有以下任意一个权限
     * @throws IOException 
     */
    boolean hasAnyPermi(String permission) throws IOException;

    /**
     * 判断用户是否拥有某个角色
     *
     * @param role 角色字符串
     * @return 用户是否具备某角色
     * @throws IOException 
     */
    boolean hasRole(String role) throws IOException;

    /**
     * 验证用户是否不具备某角色，与 isRole逻辑相反。
     *
     * @param role 角色名称
     * @return 用户是否不具备某角色
     * @throws IOException 
     */
    boolean lacksRole(String role) throws IOException;

    /**
     * 验证用户是否具有以下任意一个角色
     *
     * @param roles 以 ROLE_NAMES_DELIMETER 为分隔符的角色列表
     * @return 用户是否具有以下任意一个角色
     */
    boolean hasAnyRoles(String roles);

}